今天將會實做在網頁系統中常見的 API 功能,Login 登入,這邊需要的引入 springboot 框架下的 AuthentictionManager 以及 SecurityContextHolder 等權限的模組。
首先在 payload 這個 package 中新增 LoginDto 的 class,同樣是用來與資料庫欄位做對應設定,在 User 資料表中有 username 帳號 (也有可能是 email)、密碼。所以設定的參數型態如下:
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class LoginDto {
private String usernameOrEmail;
private String password;
}
在 service package 中新增一個 AuthService Interface class
public interface AuthService {
String login(LoginDto loginDto);
}
在 service impl package 中新增 AuthServiceImpl.java 的 class
在登入的功能中需要使用 授權模組來進行安全性的執行
public class AuthServiceImpl implements AuthService{
private AuthentictionManager authenticationManager;
public AuthServiceImpl(AuthenticationManager authticationManager){
this.authenticationManager = authenticationManager ;
}
@Override
public String login(LoginDto loginDto) {
Authentication authentication = authenticationManager.authenticate(new UsernamePasswordAuthticationToken(
loginDto.getUsernameOrEmail(),loginDto.getPassword()));
// 引入 spring framework 中的模組
SecurityContextHolder.getContext().setAuthentication(authentication);
return "User login successfully";
}
}
在 controller 的 package 中新增 AuthController.java class
@ResetController
@RequestMapping("/api/auth")
public class AuthController{
private AuthService authService;
public AuthController(AuthService authService){
this.authService = authService;
}
// 主要負責處理 Login 的 REST API
@PostMapping("login")
@PostMapping(value={"/login","/signin"})
public ResponseEntity<String> login(LoginDto loginDto){
String response = authService.login(loginDto);
return ResponseEntity.ok(response);
}
}
@PostMapping("login") 這個註釋同時也可以使用串接的方式,就是說如果 login 以及 signin 要使用同一個則可以用:
@PostMapping(value={"/login","/signin"})
可以在 Postman 中使用:
http://localhost:8080/api/auth/login 來進行測試,選用 POST
{
"usernameOrEmail" :"abcd@gmail.com",
"password" : "aabbcc"
}
今天的紀錄就先到這裡,明天會講述關於註冊的 API 實作!
有任何問題歡迎留言一起討論~ 明天見~